1 # -*- coding: utf-8 -*-
2 ##############################################################################
4 # Non-real time point of sale module for OpenERP, Permit user to record his
5 # sales in point of sale interface in non-real time.
6 # Copyright (C) 2016 L'Heureux Cyclage (<http://www.heureux-cyclage>)
9 # This file is a part of Non-real time point of sale
11 # Non-real time point of sale is free software: you can redistribute it
12 # and/or modify it under the terms of the GNU General Public License as
13 # published by the Free Software Foundation, either version 3 of the
14 # License, or (at your option) any later version.
16 # Non-real time point of sale is distributed in the hope that it will be
17 # useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
18 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
19 # Public License for more details.
21 # You should have received a copy of the GNU General Public License
22 # along with this program. If not, see <http://www.gnu.org/licenses/>.
24 ##############################################################################
26 from openerp
.osv
import osv
27 from openerp
.osv
import orm
28 from openerp
.osv
import fields
31 class pos_session(orm
.Model
):
32 _inherit
= 'pos.session'
35 'start_at': fields
.datetime('Opening date'),
36 'stop_at': fields
.datetime('Closing date'),
39 def create(self
, cr
, uid
, values
, context
=None):
41 Put the same date in bank statements as pos session and define the
44 context
= context
or {}
45 bank_st_obj
= self
.pool
.get('account.bank.statement')
46 period_obj
= self
.pool
.get('account.period')
47 context
= dict(context
, account_period_prefer_normal
=True)
49 id = super(pos_session
, self
).create(cr
, uid
, values
, context
=context
)
50 for session
in self
.browse(cr
, uid
, [id], context
=context
):
51 default_date
= session
.start_at
52 bank_st_ids
= bank_st_obj
.search(cr
, uid
, [('pos_session_id', '=', id)], context
=context
)
53 period
= period_obj
.find(cr
, uid
, dt
=default_date
, context
=dict(context
or {}, account_period_prefer_normal
=True))[0]
54 bank_st_obj
.write(cr
, uid
, bank_st_ids
, {'date': default_date
, 'period_id': period
}, context
=context
)
57 def _confirm_orders(self
, cr
, uid
, ids
, context
=None):
58 """Put the same date in sale account move as pos session"""
59 account_move_obj
= self
.pool
.get('account.move')
60 order_obj
= self
.pool
.get('pos.order')
61 period_obj
= self
.pool
.get('account.period')
62 super(pos_session
, self
)._confirm
_orders
(cr
, uid
, ids
, context
=context
)
64 for session
in self
.browse(cr
, uid
, ids
, context
=context
):
66 order_ids
= [order
.id for order
in session
.order_ids
if order
.state
== 'done']
67 company_id
= order_obj
.browse(cr
, uid
, order_ids
, context
=context
)[0].company_id
.id
68 for order
in order_obj
.browse(cr
, uid
, order_ids
, context
=context
):
69 if order
.account_move
.id not in account_move_ids
:
70 account_move_ids
.append(order
.account_move
.id)
71 period
= period_obj
.find(cr
, uid
, dt
=session
.start_at
, context
=dict(context
or {}, company_id
=company_id
, account_period_prefer_normal
=True))[0]
72 account_move_obj
.write(cr
, uid
, account_move_ids
, {'date': session
.start_at
, 'period_id': period
}, context
=context
)
76 def wkf_action_closing_control(self
, cr
, uid
, ids
, context
=None):
78 Disable default start_at date
79 Piece of this code was copied from
80 addons/point_of_sale/point_of_sale.py:397
82 for session
in self
.browse(cr
, uid
, ids
, context
=context
):
83 for statement
in session
.statement_ids
:
84 if (statement
!= session
.cash_register_id
) and (statement
.balance_end
!= statement
.balance_end_real
):
85 self
.pool
.get('account.bank.statement').write(cr
, uid
, [statement
.id], {'balance_end_real': statement
.balance_end
})
88 def onchange_start_at(self
, cr
, uid
, ids
, start_at
, context
=None):
89 """Define same stop_at as start_at"""
91 return {'value': {'stop_at': start_at
}}
93 for session
in self
.browse(cr
, uid
, ids
, context
=context
):
94 return {'value': {'stop_at': start_at
}}
97 class pos_order(orm
.Model
):
98 _inherit
= 'pos.order'
100 def create(self
, cr
, uid
, vals
, context
=None):
101 session_obj
= self
.pool
.get('pos.session')
102 vals
.update({'date_order': session_obj
.browse(cr
, uid
, vals
['session_id'], context
=context
).start_at
})
103 res
= super(pos_order
, self
).create(cr
, uid
, vals
, context
=context
)
107 def write(self
, cr
, uid
, ids
, vals
, context
=None):
108 session_obj
= self
.pool
.get('pos.session')
109 for order
in self
.browse(cr
, uid
, ids
, context
=context
):
110 default_date_order
= order
.session_id
.start_at
111 vals
.update({'date_order': default_date_order
})
112 res
= super(pos_order
, self
).write(cr
, uid
, ids
, vals
, context
=context
)
115 def onchange_session_id(self
, cr
, uid
, ids
, session_id
, context
=None):
116 """Define date order by start date of current session"""
117 res_obj
= self
.pool
.get('pos.session')
120 return {'value': data
}
122 for session
in res_obj
.browse(cr
, uid
, [session_id
],
124 default_date_order
= session
.start_at
125 return {'value': {'date_order': default_date_order
}}
127 def add_payment(self
, cr
, uid
, order_id
, data
, context
=None):
128 """Define payment date by the order date"""
129 statement_obj
= self
.pool
.get('account.bank.statement.line')
131 order
= self
.browse(cr
, uid
, [order_id
], context
=context
)[0]
132 date_order
= order
.date_order
133 super(pos_order
, self
).add_payment(cr
, uid
, order_id
, data
, context
=context
)
135 for statement
in order
.statement_ids
:
136 statement_ids
.append(statement
.id)
137 statement_obj
.write(cr
, uid
, statement_ids
, {'date': date_order
}, context
=context
)
140 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: